package com.inews.business.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import com.inews.base.persistence.DynamicSpecifications;
import com.inews.base.persistence.SearchFilter;
import com.inews.base.utils.ExtDataUtil;
import com.inews.base.vo.ExtData;
import com.inews.business.InewsBusinessConstants;
import com.inews.business.entity.TblBaseUser;
import com.inews.business.repository.UserDao;

@Service
public class UserServiceImpl implements UserService, InewsBusinessConstants{
	
	@Autowired
	private UserDao userDao;
	@Autowired
	private PasswordEncoder passwordEncoder;
	
	
	/**
	 * 分页查询系统用户信息.
	 *
	 * @param filters the filters
	 * @param page the page 
	 * @return the ext data
	 * @throws Exception the exception
	 */
	public ExtData<TblBaseUser> findSysUserVoPage(List<SearchFilter> filters, Pageable page) throws Exception{
		Page<TblBaseUser> pageList = userDao.findAll(DynamicSpecifications.bySearchFilter(filters, TblBaseUser.class), page);
		return ExtDataUtil.genWithPageData(pageList);
	}

	
//	/**
//	 * 新增系统用户信息.
//	 *
//	 * @param vo the vo
//	 * @param user the user
//	 * @return the ext data
//	 * @throws Exception the exception
//	 */
//	public ExtData<SysUserVo> doInsertBaseUser(SysUserVo vo, BaseUserVo user) throws Exception{
//		String currentTime = userDao.getCurrentTime();
//		//对提交的用户信息进行校验
//		this.validateSysUser(vo);
//		TblBaseUser po = new TblBaseUser();
//		BeanCopyUtil.beanCopy(vo, po);
//		Long userIdSeq = userDao.getNextValSeq(SEQ_USERID);
//		String userId = InewsUtils.codeFormat(SEQ_USERID_FORMAT, userIdSeq);
//		po.setUserId(userId);
//		po.setPassword(passwordEncoder.encode(vo.getPassword()));
//		po.setStatus(USER_STATUS_NORMAL);
//		po.setCreateUserId(user.getUserId());
//		po.setCreateTime(currentTime);
//		po.setLastUpdUserId(user.getUserId());
//		po.setLastUpdDes(InewsBusinessConstants.LAST_UPD_DES_ADD);
//		po.setLastUpdTime(currentTime);
//		userDao.doInsertBaseUserPo(po);
//		return ExtDataUtil.genWithSingleData(vo);
//	}
//	
//	
//	
//
//	/**
//	 * 更新系统用户信息.
//	 *
//	 * @param vo the vo
//	 * @param user the user
//	 * @return the ext data
//	 * @throws Exception the exception
//	 */
//	public ExtData<SysUserVo> doUpdateBaseUser(SysUserVo vo, BaseUserVo user) throws Exception{
//		String currentTime = userDao.getCurrentTime();
//		//从数据库中查找对象
//		String userId = vo.getUserId();
//		List<Filter> filters = new ArrayList<Filter>();
//		filters.add(new Filter("userId", Filter.STRING, userId, Comparison.EQ));
//		List<TblBaseUser> userPoList = userDao.findSysUserPo(filters);
//		if(InewsUtils.isNotEmpty(userPoList)){
//			TblBaseUser po = userPoList.get(0);
//			po.setUserName(vo.getUserName());
//			po.setEmail(vo.getEmail());
//			po.setMobile(vo.getMobile());
//			po.setLastUpdUserId(user.getUserId());
//			po.setLastUpdDes(LAST_UPD_DES_UPDATE);
//			po.setLastUpdTime(currentTime);
//			userDao.doUpdateBaseUserPo(po);
//		}
//		return ExtDataUtil.genWithSingleData(vo);
//	}
//	
//	
//	
//	/**
//	 * 删除系统用户信息.
//	 *
//	 * @param vo the vo
//	 * @param user the user
//	 * @return the ext data
//	 * @throws Exception the exception
//	 */
//	public ExtData<SysUserVo> doDeleteBaseUser(SysUserVo vo, BaseUserVo user) throws Exception{
//		String currentTime = userDao.getCurrentTime();
//		String userId = vo.getUserId();
//		List<Filter> filters = new ArrayList<Filter>();
//		filters.add(new Filter("userId", Filter.STRING, userId, Comparison.EQ));
//		List<TblBaseUser> userPoList = userDao.findSysUserPo(filters);
//		if(InewsUtils.isNotEmpty(userPoList)){
//			TblBaseUser po = userPoList.get(0);
//			//更新时的业务逻辑
//			po.setStatus(USER_STATUS_DELETE);
//			po.setLastUpdUserId(user.getUserId());
//			po.setLastUpdDes(LAST_UPD_DES_DELETE);
//			po.setLastUpdTime(currentTime);
//			userDao.doUpdateBaseUserPo(po);
//		}
//		return ExtDataUtil.genWithSingleData(vo);
//	}
//	
//	
//	
//	
//	/**
//	 * 根据用户Id查询对应的角色信息.
//	 *
//	 * @param userId the user id
//	 * @throws Exception the exception
//	 */
//	public ExtData<SysRoleVo> findRoleByUser(SysUserVo vo) throws Exception{
//		String userId = vo.getUserId();
//		List<SysRoleVo> roleVoList = userDao.findRoleByUser(userId);
//		return ExtDataUtil.genWithData(roleVoList);
//	}
//	
//	
//	
//	/**
//	 * 分配用户角色.
//	 *
//	 * @param vo the vo
//	 * @param user the user
//	 * @return the ext data
//	 * @throws Exception the exception
//	 */
//	public ExtData<SysUserVo> doDistributeRole(SysUserVo vo, BaseUserVo user) throws Exception{
//		String currentTime = userDao.getCurrentTime();
//		String userId = vo.getUserId();
//		//删除用户角色对应表中的信息
//		List<Filter> userIdFilter = new ArrayList<Filter>();
//		userIdFilter.add(new Filter("userId", Filter.STRING, userId, Comparison.EQ));
//		List<TblBaseUserRole> userRolePoList = userDao.findSysUserRolePo(userIdFilter);
//		if(InewsUtils.isNotEmpty(userRolePoList)){
//			for (TblBaseUserRole userRolePo : userRolePoList) {
//				userDao.doDeleteBaseUserRolePo(userRolePo);
//			}
//		}
//		//添加用户角色信息
//		List<SysRoleVo> roleVoList = vo.getRoleList();
//		if(InewsUtils.isNotEmpty(roleVoList)){
//			for (SysRoleVo sysRoleVo : roleVoList) {
//				String roleId = sysRoleVo.getRoleId();
//				TblBaseUserRole userRolePo = new TblBaseUserRole();
//				userRolePo.setUserId(userId);
//				userRolePo.setRoleId(roleId);
//				userDao.doInsertBaseUserRolePo(userRolePo);
//			}
//		}
//		//更新最后修改用户和时间
//		List<TblBaseUser> userPoList = userDao.findSysUserPo(userIdFilter);
//		if(InewsUtils.isNotEmpty(userPoList)){
//			TblBaseUser po = userPoList.get(0);
//			po.setLastUpdTime(currentTime);
//			po.setLastUpdUserId(user.getUserId());
//			po.setLastUpdDes("分配用户角色");
//			userDao.doUpdateBaseUserPo(po);
//		}
//		return ExtDataUtil.genWithSingleData(vo);
//	}
//	
//	
//	
//	/**
//	 * 重置密码.
//	 *
//	 * @param vo the vo
//	 * @param user the user
//	 * @return the ext data
//	 * @throws Exception the exception
//	 */
//	public ExtData<SysUserVo> doResetPassword(SysUserVo vo, BaseUserVo user) throws Exception{
//		validatePassword(vo);
//		String currentTime = userDao.getCurrentTime();
//		String userId = vo.getUserId();
//		List<Filter> filters = new ArrayList<Filter>();
//		filters.add(new Filter("userId", Filter.STRING, userId, Comparison.EQ));
//		List<TblBaseUser> userPoList = userDao.findSysUserPo(filters);
//		if(InewsUtils.isNotEmpty(userPoList)){
//			TblBaseUser po = userPoList.get(0);
//			po.setPassword(passwordEncoder.encode(vo.getPassword()));
//			po.setLastUpdTime(currentTime);
//			po.setLastUpdUserId(user.getUserId());
//			po.setLastUpdDes("重置密码");
//			userDao.doUpdateBaseUserPo(po);
//		}
//		return ExtDataUtil.genWithSingleData(vo);
//	}
//	
//	
//	
//	
//	/**
//	 * 对用户信息进行校验.
//	 *
//	 * @param vo the vo
//	 * @throws Exception 
//	 */
//	private void validateSysUser(SysUserVo vo) throws Exception {
//		String loginName = vo.getLoginName();
//		List<Filter> filters = new ArrayList<Filter>();
//		filters.add(new Filter("loginName", Filter.STRING, loginName, Comparison.EQ));
//		List<TblBaseUser> poList = userDao.findSysUserPo(filters);
//		if(InewsUtils.isNotEmpty(poList)){
//			throw new BussnissException("登录名已经存在，请重新输入");
//		}
//		validatePassword(vo);
//	}
//	
//	
//	/**
//	 * 校验密码是否重复.
//	 *
//	 * @param vo the vo
//	 * @throws Exception the exception
//	 */
//	private void validatePassword(SysUserVo vo) throws Exception{
//		String password = vo.getPassword();
//		String againPassword = vo.getAgainPassword();
//		if(!password.equals(againPassword)){
//			throw new BussnissException("两次输入的密码不一致，请重新输入");
//		}
//	}
	
	
}
